// import express from 'express'; // express 模块在此文件中未被使用，可以移除
import bcrypt from 'bcryptjs';
import jwt from 'jsonwebtoken';
import { user } from '../db/index.js'; // 确保 user 模型已在 db/index.js 中正确定义和导出
import config from '../config.js';

// 统一返回格式
const cc = (res, err, status = 1) => {
    res.send({
        status,
        message: err instanceof Error ? err.message : err,
    });
};

// 注册新用户
const regUser = async (req, res) => {
    // 接收表单数据
    const userinfo = req.body;

    // 验证数据
    if (!userinfo.username || !userinfo.password) {
        return cc(res, '用户名或密码不能为空！');
    }

    try {
        // 检查用户名是否被占用
        const existingUser = await user.findOne({ username: userinfo.username });
        if (existingUser) {
            return cc(res, '用户名被占用，请更换其他用户名！');
        }

        // 用户名可用，加密密码
        userinfo.password = bcrypt.hashSync(userinfo.password, 10);

        // 插入新用户
        const newUserId = await user.insert(userinfo);

        if (!newUserId) { // insert 方法在成功时返回 insertId，如果失败则可能返回 undefined 或抛出错误
            return cc(res, '注册用户失败，请稍后再试！');
        }

        // 注册成功
        cc(res, '注册成功！', 0); // 修正：成功状态码为0，并传入res对象
    } catch (err) {
        return cc(res, err);
    }
};


const login = async (req, res) => {
    // 接收表单数据
    const userinfo = req.body;

    // 验证数据
    if (!userinfo.username || !userinfo.password) {
        return cc(res, '请输入用户名和密码！');
    }

    try {
        // 查询用户信息
        const foundUser = await user.findOne({ username: userinfo.username });

        // 检查用户是否存在
        if (!foundUser) {
            return cc(res, '用户名或密码错误！');
        }

        // 比较密码
        const compareResult = bcrypt.compareSync(userinfo.password, foundUser.password);
        if (!compareResult) {
            return cc(res, '用户名或密码错误！');
        }

        // 密码正确，生成Token
        // 注意: 确保 foundUser.id 和 foundUser.username 存在且是期望的值
        const tokenPayload = { id: foundUser.id, username: foundUser.username };
        // 从数据库模型中移除敏感信息，例如密码
        const userToReturn = { ...foundUser };
        delete userToReturn.password;
        req.session.id = foundUser.id;


        const token = jwt.sign(
            tokenPayload,
            config.JSON_SECRET_KEY,
            { expiresIn: '24h',algorithm: 'HS256' }
        );

        // 登录成功响应
        res.send({
            status: 0,
            message: '登录成功！',
            // token: "Bearer "+token,
            token: token,
            user: userToReturn
            // userInfo: { // 返回不含密码的用户信息
            //     id: foundUser.id,
            //     username: foundUser.username,
            //     // email: foundUser.email, // 如果需要，可以添加其他字段
            //     // age: foundUser.age,     // 如果需要，可以添加其他字段
            // }
        });
    } catch (err) {
        return cc(res, err);
    }
};

const getUsers = async (req, res) => {
    // 接收表单数据
   
    try {
        // 查询用户信息
        const foundUser = await user.find();
        for (let i = 0; i < foundUser.length; i++) {
            delete foundUser[i].password;
        }
 
  




   

        // 登录成功响应
        res.send({
            status: 0,
            message: '成功！',
            data: foundUser
            // userInfo: { // 返回不含密码的用户信息
            //     id: foundUser.id,
            //     username: foundUser.username,
            //     // email: foundUser.email, // 如果需要，可以添加其他字段
            //     // age: foundUser.age,     // 如果需要，可以添加其他字段
            // }
        });
    } catch (err) {
        return cc(res, err);
    }
};

export default { regUser, login,getUsers };